package com.hoe.tsb.mmk;

import lombok.Data;

import java.io.Serializable;
import java.util.List;
import java.util.TreeMap;

/**
 * <p>
 * 溯源数据
 * </p>
 * 该数据中形成一条溯源链的侧链，最终构成了Multi-Merkle结构
 *
 * @author hoe
 * @version 1.0
 * @date 2022/11/24 10:25
 */
@Data
public class TraceData implements Serializable {
    private static final long serialVersionUID = 1L;

//    /**
//     * 交易所在的区块Hash<br/>
//     * 提交数据时无法获取该字段，该字段需要在生成区块并上链时生成
//     */
//    private String blockHash;

    /**
     * 溯源数据整体构成的Hash<br/>
     * 由sign、parentTrace、body共同计算得出，在客户端提交数据阶段就可以得到<br/>
     *
     */
    private String traceHash;

    /**
     * 溯源数据的签名<br/>
     * 签名数据只包含parentTrace和body字段<br/>
     * 使用环签名算法，后面需要追加签名的公钥、随机数、C0，整体结构如下<br/>
     * C0;S1,S2,...Sn;P1,P2,...,Pn
     */
    private String sign;

    /**
     * 父溯源数据链路<br/>
     * 溯源数据所在Hash
     * 此Hash和Merkle倒数第二层计算出的Hash一致<br/>
     * 父溯源数据支持多父节点
     */
    private List<String> parentTrace;

    /**
     * 溯源数据本身<br/>
     * 字段不固定，可以动态添加任何字段<br/>
     * 字段是有顺序的
     */
    private TreeMap<String, String> body;

    /**
     * 序列化TraceData<br/>
     * 用分号进行分割，本来有分号的转义成URLEncode编码%0b<br/>
     * @return 编码
     */
    public static String ser() {
        return null;
    }

}
